#include "flash.h"

// 时钟频率为APB2时钟*2 = 72MHz
// 分频值为 360000
// 实际工作频率: 2000Hz
// => 每秒数2000个
// => 每一个数0.5ms
// => 数1000个数为0.5s

void FLASH_init(void)
{
    // 如果有时钟开关, 需要用RCC_xxxxCmd函数开启
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);

    // 先准备XXX_InitTypedef结构体的参数
    TIM_TimeBaseInitTypeDef TIM_initStruct = {0};
    // 时钟分频值
    TIM_initStruct.TIM_Prescaler = 36000 - 1;
    // 计数模式: TIM6只能向上
    TIM_initStruct.TIM_CounterMode = TIM_CounterMode_Up;
    // 重载值
    TIM_initStruct.TIM_Period = 1000 - 1;
    // 死区设置, TIM1/8在电机驱动模式时才有效, 其他定时器没有此功能
    // TIM_initStruct.TIM_ClockDivision;
    // 重复计数器, T1/T8才有 其他定时器无此功能
    // TIM_initStruct.TIM_RepetitionCounter;

    // 使用XXX_Init()初始化工作
    TIM_TimeBaseInit(TIM6, &TIM_initStruct);
    // 如果有中断，配置外设本身中断源(XXX_ITConfig())
    TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);

    // 配置中断通道(NVIC_Init())
    NVIC_InitTypeDef NVIC_initStruct = {0};
    NVIC_initStruct.NVIC_IRQChannel = TIM6_IRQn;
    NVIC_initStruct.NVIC_IRQChannelPreemptionPriority = 3;
    NVIC_initStruct.NVIC_IRQChannelSubPriority = 2;
    NVIC_initStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_initStruct);

    // 在it.c文件中写中断处理函数
    
    // 如果有XXX_cmd(), 则调用其开启功能
    TIM_Cmd(TIM6, ENABLE);
}
